package me.youline.dataServer.service.support.file;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import me.youline.dataServer.service.image.ImageSize;
import me.youline.dataServer.service.support.config.ImageSizeConfig;

/**
 * 图片文件定位器
 * @author linhan
 *
 */
public abstract class AbstractImgFileLocator<T extends ImageSizeConfig> extends DefaultFileLocator implements FileLocator{
	
	/**
	 * 图片尺寸配置
	 */
	private final ImageSizeConfig config;
	
	
	private final String IMG_FILE_URL_PATTERN = "%s%s[%s]"; 
	
	private final String IMG_FILE_SOURCE = "%s%s";
	
	public AbstractImgFileLocator(T config){
		this.config = config;
	}
	
	/**
	 * 获取图片文件完整文件系统地址
	 * @param baseUrl
	 * @param size
	 * @return
	 */
	public String getImgFileUrl(String baseUrl, ImageSize size) {
		if(size.isBlankSize()){
			return String.format(IMG_FILE_SOURCE, getFileRoot(),baseUrl);
		}
		return String.format(IMG_FILE_URL_PATTERN, getFileRoot(),baseUrl,size.getSizeFormatStr());
	}
	
	/**
	 * 获取图片资源web url
	 * @param baseUrl
	 * @param size
	 * @return
	 */
	public String getImgWebUrl(String baseUrl,ImageSize size){
		return getHttpUrlStr(String.format(IMG_FILE_URL_PATTERN, getFileCategoryName(),baseUrl,size.getSizeFormatStr()));
	}
	
	/**
	 * 获取所有与原图片相关的其他尺寸的图片
	 * @param url
	 * @return
	 */
	public List<File> getAllRelatedSizeFiles(String url){
		List<File> files = new ArrayList<File>();
		for( ImageSize s : config.getAllImageSize()){
			files.add(new File(this.getImgFileUrl(url, s)));
		}
		return files;
	}
	
	/* 
	 * 此处获取的是原图位置
	 * 
	 */
	public String getFilePath(String url){
		return getFileRoot() + url;
	}
}